perm filename 9MER27.SAI[BIG,HPM]3 blob
sn#265342 filedate 1977-02-18 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "NTONIC"
C00006 00003
C00011 ENDMK
C⊗;
BEGIN "NTONIC"
REQUIRE "DDHDR.SAI[GRA,HPM]" SOURCE_FILE;
REQUIRE "PRANDR.SAI[BIG,HPM]" SOURCE_FILE;
DEFINE NEL=33, N=3, NOPEN=9;
INTEGER DONE,FOO,I,J,K,L;
STRING S; BOOLEAN MERGE,PASS;
INTEGER ARRAY WIRE[0:N-1,0:NEL-1],STATE[0:N-1,0:NEL-1],NSET[0:NEL-1];
INTEGER ARRAY NEXT,PERM,OUTPUT,INPUTMAP1,INPUTMAP[0:N*NOPEN-1];
PROCEDURE FOLLOW;
BEGIN
INTEGER I,J,K,L;
DONE←0;
WHILE DONE<NEL DO FOR I←0 STEP 1 UNTIL NEL-1 DO IF NSET[I]=N THEN
BEGIN
FOR J←1 STEP 1 UNTIL N-1 DO FOR K←0 STEP 1 UNTIL J-1 DO
IF STATE[J,I]<STATE[K,I] THEN STATE[J,I]↔STATE[K,I];
FOR J←0 STEP 1 UNTIL N-1 DO
BEGIN
K←WIRE[J,I];
IF K≥0 THEN
BEGIN
L←NSET[K];
NSET[K]←L+1;
STATE[L,K]←STATE[J,I];
END
ELSE
OUTPUT[-1-K]←STATE[J,I];
END;
NSET[I]←-N;
DONE←DONE+1;
END;
END;
PROCEDURE DRAW;
BEGIN
REAL ARRAY X,Y[0:NEL-1];
INTEGER I,J,K;
PROCEDURE SET(INTEGER L; REAL XV,YV);
BEGIN X[L]←XV; Y[L]←YV; END;
FOR I←0 STEP 1 UNTIL 2 DO
BEGIN
SET(I*6+0,1,1+I*3);
SET(I*6+1,1,2+I*3);
SET(I*6+2,1,3+I*3);
SET(I*6+3,2,2+I*3);
SET(I*6+4,3,1.2+I*3);
SET(I*6+5,3,2.8+I*3);
END;
FOR I←2 STEP 1 UNTIL 8 DO SET(I+16,5,I);
FOR I←1 STEP 1 UNTIL 8 DO SET(I+24,6,I+.5);
DDINIT;
SCREEN(-1,-1,9,11);
DRKEN; RECTAN(-100,-100,100,100); LITEN;
FOR I←0 STEP 1 UNTIL NEL-1 DO RECTAN(X[I]-.1,Y[I]-.2,X[I]+.2,Y[I]+.2);
FOR I←0 STEP 1 UNTIL N*NOPEN-1 DO
LINE(0,I*10/26,X[INPUTMAP[I]],Y[INPUTMAP[I]]);
FOR I←0 STEP 1 UNTIL NEL-1 DO
FOR J←0 STEP 1 UNTIL N-1 DO
BEGIN REAL FX,FY;
FX←X[I]+.2; FY←Y[I]-.2+J*.2;
IF WIRE[J,I]<0 THEN LINE(FX,FY,8,(-1-WIRE[J,I])*10/26)
ELSE LINE(FX,FY,X[WIRE[J,I]],Y[WIRE[J,I]]);
END;
FOR I←1,2,3 DO DPYUP('36);
SHOW('36);
END;
PROCEDURE M3WAY(INTEGER FIRST; INTEGER ARRAY NEXT);
BEGIN
WIRE[0,0+FIRST]←NEXT[0];
WIRE [1,0+FIRST]←4+FIRST;
WIRE[2,0+FIRST]←3+FIRST;
WIRE[0,1+FIRST]←4+FIRST;
WIRE[1,1+FIRST]←3+FIRST;
WIRE[2,1+FIRST]←5+FIRST;
WIRE[0,2+FIRST]←3+FIRST;
WIRE[1,2+FIRST]←5+FIRST;
WIRE[2,2+FIRST]←NEXT[8];
WIRE[0,3+FIRST]←4+FIRST;
WIRE[1,3+FIRST]←NEXT[4];
WIRE[2,3+FIRST]←5+FIRST;
WIRE[0,4+FIRST]←NEXT[1];
WIRE[1,4+FIRST]←NEXT[2];
WIRE[2,4+FIRST]←NEXT[3];
WIRE[0,5+FIRST]←NEXT[5];
WIRE[1,5+FIRST]←NEXT[6];
WIRE[2,5+FIRST]←NEXT[7];
END;
FOR I←0 STEP 1 UNTIL 2 DO FOR J←0 STEP 1 UNTIL 8 DO
INPUTMAP1[I*9+J]←I*6+(J MOD 3);
FOR I←0 STEP 1 UNTIL 26 DO
INPUTMAP[I]←INPUTMAP1[I%3+(I MOD 3)*9];
NEXT[0]←-1;
NEXT[1]←25;
FOR I←2 STEP 1 UNTIL 8 DO NEXT[I]←16+I;
M3WAY(6*0,NEXT);
NEXT[0]←25;
NEXT[8]←32;
FOR I←1 STEP 1 UNTIL 7 DO NEXT[I]←17+I;
M3WAY(6*1,NEXT);
FOR I←0 STEP 1 UNTIL 6 DO NEXT[I]←18+I;
NEXT[7]←32;
NEXT[8]←-27;
M3WAY(6*2,NEXT);
FOR I←1 STEP 1 UNTIL 3 DO
BEGIN
WIRE[0,21-I]←28-I;
WIRE[1,21-I]←WIRE[2,21-I]←29-I;
WIRE[2,21+I]←29+I;
WIRE[1,21+I]←WIRE[0,21+I]←28+I;
END;
FOR I←1 STEP 1 UNTIL 4 DO
BEGIN
WIRE[0,29-I]←3*I-14; WIRE[1,29-I]←3*I-15; WIRE[2,29-I]←3*I-16;
WIRE[0,28+I]←-3*I-12; WIRE[1,28+I]←-3*I-13; WIRE[2,28+I]←-3*I-14;
END;
WIRE[0,21]←28; WIRE[1,21]←-14; WIRE[2,21]←29;
DRAW;
BEGIN
INTEGER ARRAY CNTR[1:N*NOPEN];
INTEGER ARRAY CHECK[0:N*NOPEN,0:N*NOPEN];
FOR I←1 STEP 1 UNTIL N*NOPEN DO CNTR[I]←(N*NOPEN-I)%NOPEN;
MERGE←TRUE;
DO
BEGIN
K←-1;
FOR I←N-1 STEP -1 UNTIL 0 DO FOR J←1 STEP 1 UNTIL N*NOPEN DO
IF CNTR[J]=I THEN PERM[K←K+1]←J;
FOR I←0 STEP 1 UNTIL NEL-1 DO NSET[I]←0;
FOR I←0 STEP 1 UNTIL N*NOPEN-1 DO
BEGIN
K←INPUTMAP[I];
L←NSET[K];
NSET[K]←L+1;
STATE[L,K]←PERM[I];
END;
FOLLOW;
PASS←FALSE;
FOR K←0 STEP 1 UNTIL N*NOPEN-1 DO
BEGIN
L←0; WHILE CHECK[K,L]≠0∧CHECK[K,L]<OUTPUT[K] DO L←L+1;
IF CHECK[K,L]≠OUTPUT[K] THEN
BEGIN
WHILE OUTPUT[K]≠0 DO
BEGIN
CHECK[K,L]↔OUTPUT[K];
L←L+1;
END;
PASS←TRUE;
END;
END;
IF PASS THEN
BEGIN
FOR K←0 STEP 1 UNTIL N*NOPEN-1 DO
BEGIN
TXTPOS(8.01,(N*NOPEN-1-K-.5)*10/26+.2,.1,.2);
L←0; WHILE CHECK[K,L]≠0 DO TEXT('77+CHECK[K,(L←L+1)-1]);
END;
DPYUP('36);
END;
PWITHR(CNTR,N*NOPEN,MERGE);
END UNTIL MERGE;
END;
END;